package com.doudou.collection.domain.service;

import com.doudou.collection.orm.dto.user.login.*;
import com.doudou.collection.orm.dto.user.reg.*;
import com.doudou.collection.orm.dto.user.update.*;
import com.doudou.collection.orm.vo.UserLoginSimpleVO;
import org.springframework.transaction.annotation.Transactional;

/**
 * className: UserService<br>
 * description: 用户业务逻辑类<br>
 * author: 李浩文<br>
 * date: 2023/6/2 17:42<br>
 * version: 1.0<br>
 */
@Transactional
public interface UserService {

    /**
     * 用户登录业务逻辑(用户名登陆)
     */
    UserLoginSimpleVO loginByUsername(UserLoginDTO userLoginDTO);

    /**
     * 用户登录业务逻辑(邮箱登陆)
     */
    UserLoginSimpleVO loginByEmail(EmailLoginDTO emailLoginDTO);

    /**
     * 用户登录业务逻辑(手机号登陆)
     */
    UserLoginSimpleVO loginByPhone(PhoneLoginDTO phoneLoginDTO);

    /**
     * 用户登录业务逻辑(手机验证码登陆)
     */
    UserLoginSimpleVO loginByPhoneAndCode(PhoneCodeLoginDTO phoneCodeLoginDTO);

    /**
     * 用户登录业务逻辑(邮箱验证码登陆)
     */
    UserLoginSimpleVO loginByEmailAndCode(EmailCodeLoginDTO emailCodeLoginDTO);

    /**
     * 用户注册业务逻辑(用户名密码注册)
     */
    void addNewByUsername(UserRegDTO userRegDTO);

    /**
     * 用户注册业务逻辑(邮箱密码注册)
     */
    void addNewByEmail(EmailRegDTO emailRegDTO);

    /**
     * 用户注册业务逻辑(手机号密码注册)
     */
    void addNewByPhone(PhoneRegDTO phoneRegDTO);

    /**
     * 用户注册业务逻辑(手机号验证码注册)
     */
    void addNewByPhoneAndCode(PhoneCodeRegDTO phoneCodeRegDTO);

    /**
     * 用户注册业务逻辑(邮箱验证码注册)
     */
    void addNewByEmailAndCode(EmailCodeRegDTO emailCodeRegDTO);

    /**
     * 用户更新修改个人详情信息
     */
    void updateUserDetailById(UserDetailDTO userDetailDTO);

    /**
     * 发送手机验证码
     */
    void sendCodeToPhone(String phone);

    /**
     * 发送邮箱验证码
     */
    void sendCodeToEmail(String email);

    /**
     * 通过id修改用户名的业务逻辑
     */
    void updateUsernameById(UserUpdateNameDTO userUpdateNameDTO);

    /**
     * 通过id修改密码的业务逻辑
     */
    void updatePasswordById(UserUpdatePwdDTO userUpdatePwdDTO);

    /**
     * 通过id修改email的业务逻辑
     */
    void updateEmailById(UserUpdateEmailDTO userUpdateEmailDTO);

    /**
     * 通过id修改手机的业务逻辑
     */
    void updatePhoneById(UserUpdatePhoneDTO userUpdatePhoneDTO);
}
